package com.example.shop.goods.service;

import com.example.shop.common.api.ServiceReturn;
import com.example.shop.goods.dto.*;
import com.example.shop.pojo.GoodsType;
import com.example.shop.pojo.Merchant;
import com.example.shop.pojo.User;
import org.springframework.beans.factory.annotation.Value;

import java.util.List;
import java.util.Set;

public interface BrowseGoodsService {


    /**
     * 获取该商家的商品详细信息(商家的展示的信息)
     * @param merchant 商家
     * @param goodsId 商品id
     * @return 返回指定的商品的详细信息
     */
    ServiceReturn<MerchantGoodsDetailBrowseInfo> merchantObtainDetailInfo(Merchant merchant, long goodsId);

    /**
     * 获取指定商品的详细信息(用户展示的信息)
     * @param id 指定商品的唯一标识
     * @return 返回指定商品的详细信息
     */
    ServiceReturn<GoodsDetailBrowseInfo> obtainDetailInfo(long id);


    /**
     * 获取商品的浏览列表
     * @param queryParam 查询条件建筑者
     * @param fondRatioList 商品爱好推荐。如果不为null，则进行爱好推荐+广告推荐。否则就进行广告推荐
     * @return 返回一页商品浏览数据
     */
    ServiceReturn<List<GoodsBrowseInfo>> obtainBrowseList(GoodsQueryParam queryParam, Set<GoodsTypeFondRatio> fondRatioList);

    /**
     * 获取指定类型的商品的浏览列表
     * @param goodsType 商品类型
     * @param pageIndex 获取第几页数据，首页为第1页
     * @return 指定类型的商品的浏览列表
     */
    ServiceReturn<List<GoodsBrowseInfo>> obtainBrowseListByType(GoodsType goodsType,int pageIndex);

    /**
     * 获取符合模糊搜索商品名的浏览商品列表
     * @param name 模糊搜索的商品名
     * @param fondRatioList 商品爱好推荐。如果不为null，则进行爱好推荐+广告推荐。否则就进行广告推荐
     * @param pageIndex 获取第几页数据，首页为第1页
     * @return 返回浏览商品列表
     */
    ServiceReturn<List<GoodsBrowseInfo>> obtainBrowseListLikeName(String name,Set<GoodsTypeFondRatio> fondRatioList,int pageIndex);

    /**
     * 获取指定范围价格内的商品浏览列表
     * @param rangeQueryParam 范围查询参数
     * @param fondRatioList 商品爱好推荐。如果不为null，则进行爱好推荐+广告推荐。否则就进行广告推荐
     * @param pageIndex 获取第几页数据，首页为第1页
     * @return 返回商品浏览列表
     */
    ServiceReturn<List<GoodsBrowseInfo>> obtainBrowseListByRange(RangeQueryParam rangeQueryParam, Set<GoodsTypeFondRatio> fondRatioList, int pageIndex);


    /**
     * 获取该商家的一页商品
     * @param merchantId 商家的唯一标识
     * @param fondRatioList 商品爱好推荐。如果不为null，则进行爱好推荐+广告推荐。否则就进行广告推荐
     * @param pageIndex 获取第几页数据，首页为第1页
     * @return 返回该商家的一页商品浏览数据
     */
    ServiceReturn<List<GoodsBrowseInfo>> merchantGoodsList(Long merchantId,Set<GoodsTypeFondRatio> fondRatioList,int pageIndex);


}
